#include<iostream>
using namespace std;

int a[1001],b[1001][100]={0},son[1001][100]={0},f[1001][3],k,m;
bool p[1001]={0};

void makedp(int s){
     p[s]=1;
     int i,j;
     for(i=1;i<=b[s][0];i++)
        if(p[b[s][i]]==0)
        {
        son[s][0]++;
        son[s][son[s][0]]=b[s][i];
        makedp(son[s][son[s][0]]);
        }
}

void workdp(int s){
     int i,j;
     if(son[s][0]>0)
     {
      for(i=1;i<=son[s][0];i++)
      workdp(son[s][i]);
      for(i=1;i<=son[s][0];i++)
      {
       j=son[s][i];
       f[s][1]+=max(f[j][1],f[j][2]);
       f[s][2]+=f[j][1];}
       f[s][2]+=a[s];}
     else {f[s][1]=0;
          f[s][2]=a[s];}
}

int main()
{
    int i,j;
    cin>>k>>m;
    for(i=1;i<=k;i++)
    cin>>a[i];
   
    for(i=1;i<=m;i++)
    {
     int s,t;
     cin>>s>>t;
     b[s][0]++;
     b[t][0]++;
     b[s][b[s][0]]=t;
     b[t][b[t][0]]=s;
    }
                    
                    
    int ans=0;                 
    for(i=1;i<=k;i++)
    if(b[i][0]==0) ans+=a[i];
    else if(p[i]==0)
    {
     makedp(i);
     workdp(i);
     ans+=max(f[i][1],f[i][2]);
    }   
    cout<<ans<<endl;
    return 0;
   
    }